Public Class cAlboQuote
    Public Structure TestataEmissioneQuote
        Dim Id As Integer
        Dim Anno As Integer
        Dim nrRata As Integer
        Dim DataEmissione As DateTime
        Dim DataScadenza As DateTime
        Dim ParametriXML As Xml.XmlDocument
        Dim FlussoId As String
        Dim Oggetto As String
    End Structure
    Public Structure ritornoCalcola
        Dim NrIscrittiFino28Anni As Integer
        Dim NrIscritti29AnniOPiu As Integer
        Dim s28IRataNrIscritti As Integer
        Dim s28IRataTotale As Decimal
        Dim s29IRataNrIscritti As Integer
        Dim s29IRataTotale As Decimal
        Dim s28IIRataNrIscritti As Integer
        Dim s28IIRataTotale As Decimal
        Dim s29IIRataNrIscritti As Integer
        Dim s29IIRataTotale As Decimal
    End Structure
    Public Shared Function getTestataEmissione(ByVal id As Integer) As TestataEmissioneQuote
        Dim ris As TestataEmissioneQuote
        Dim cn As New Sicop.Classi.DALBase.cConnessione
        Dim tb As System.Data.DataTable = cn.getDataTable("SELECT Id, Anno, NrRata, DataEmissione, DataScadenza, ParametriXML, FlussoId, Oggetto  FROM QuoteEmissione WHERE Id = " & id)
        If tb.Rows.Count = 1 Then
            ris.ParametriXML = New Xml.XmlDocument
            ris.Id = id
            ris.Anno = CType(tb.Rows(0)("Anno"), Integer)
            ris.nrRata = CType(tb.Rows(0)("NrRata"), Integer)
            ris.DataEmissione = CType(tb.Rows(0)("DataEmissione"), System.DateTime)
            ris.DataScadenza = CType(tb.Rows(0)("DataScadenza"), System.DateTime)
            ris.ParametriXML.LoadXml(DALBase.cConnessione.SQLString(tb.Rows(0)("ParametriXML")))
            ris.FlussoId = DALBase.cConnessione.SQLString(tb.Rows(0)("FlussoId"))
            ris.Oggetto = DALBase.cConnessione.SQLString(tb.Rows(0)("Oggetto"))
        End If
        Return ris
    End Function
    Public Shared Function EmettiQuote(ByVal Anno As Integer, ByVal Importo28oMeno As Decimal, ByVal Importo29oPiu As Decimal, ByVal Importo28oMenoPrimaRata As Decimal, ByVal Importo29oPiuPrimaRata As Decimal, ByVal DataScadIRata As DateTime, ByVal DataScadIIRata As DateTime, ByVal DataEmissione As DateTime) As String
        Dim sMsg As String
        Dim pXML As New Xml.XmlDocument
        Dim rootNode As Xml.XmlNode
        Dim childNode As Xml.XmlNode
        rootNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTE", "")
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "ANNO", "")
        childNode.InnerText = Anno.ToString()
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTAFINO28ANNI", "")
        childNode.InnerText = Importo28oMeno.ToString("C")
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTA29ANNIOPIU", "")
        childNode.InnerText = Importo29oPiu.ToString("C")
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTAFINO28ANNIIRATA", "")
        childNode.InnerText = Importo28oMenoPrimaRata.ToString("C")
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTA29ANNIOPIUIRATA", "")
        childNode.InnerText = Importo29oPiuPrimaRata.ToString("C")
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTAFINO28ANNIIIRATA", "")
        childNode.InnerText = (Importo28oMeno - Importo28oMenoPrimaRata).ToString("C")
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "QUOTA29ANNIOPIUIIRATA", "")
        childNode.InnerText = (Importo29oPiu - Importo29oPiuPrimaRata).ToString("C")
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "IRATASCADENZA", "")
        childNode.InnerText = DataScadIRata.ToShortDateString()
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "IIRATASCADENZA", "")
        childNode.InnerText = DataScadIIRata.ToShortDateString()
        rootNode.AppendChild(childNode)
        childNode = pXML.CreateNode(Xml.XmlNodeType.Element, "DATAEMISSIONE", "")
        childNode.InnerText = DataEmissione.ToShortDateString()
        rootNode.AppendChild(childNode)
        pXML.AppendChild(rootNode)
        Dim sp As New Data.SqlClient.SqlCommand
        sp.CommandType = CommandType.StoredProcedure
        sp.CommandText = "sp010EmissioneQuote" ' @Anno, @Imp28IRata, @Imp29IRata, @ScaIRata, @Imp28IIRata, @Imp29IIRata, @ScaIIRata, @ParametriXML, @DataEmissione"
        sp.Parameters.Add("@Anno", SqlDbType.Int)
        sp.Parameters.Add("@Imp28IRata", SqlDbType.Decimal)
        sp.Parameters.Add("@Imp29IRata", SqlDbType.Decimal)
        sp.Parameters.Add("@ScaIRata", SqlDbType.DateTime)
        sp.Parameters.Add("@Imp28IIRata", SqlDbType.Decimal)
        sp.Parameters.Add("@Imp29IIRata", SqlDbType.Decimal)
        sp.Parameters.Add("@ScaIIRata", SqlDbType.DateTime)
        sp.Parameters.Add("@ParametriXML", SqlDbType.NText)
        sp.Parameters.Add("@DataEmissione", SqlDbType.DateTime)
        sp.Parameters("@Anno").Value = Anno
        sp.Parameters("@Imp28IRata").Value = Importo28oMenoPrimaRata
        sp.Parameters("@Imp29IRata").Value = Importo29oPiuPrimaRata
        sp.Parameters("@ScaIRata").Value = DataScadIRata
        sp.Parameters("@Imp28IIRata").Value = Importo28oMeno - Importo28oMenoPrimaRata
        sp.Parameters("@Imp29IIRata").Value = Importo29oPiu - Importo29oPiuPrimaRata
        sp.Parameters("@ScaIIRata").Value = DataScadIIRata
        sp.Parameters("@ParametriXML").Value = pXML.InnerXml
        sp.Parameters("@DataEmissione").Value = DataEmissione
        Dim cn As New Sicop.Classi.DALBase.cConnessione
        sMsg = cn.runSqlCommandNoReturnValue(sp)
        If (sMsg = "") Then
            sMsg = "OK"
        End If
        Return sMsg
    End Function
    Public Shared Function CalcolaQuote(ByVal Anno As Integer, ByVal Importo28oMeno As Decimal, ByVal Importo29oPiu As Decimal, ByVal Importo28oMenoPrimaRata As Decimal, ByVal Importo29oPiuPrimaRata As Decimal, ByVal DataScadIRata As DateTime, ByVal DataScadIIRata As DateTime) As ritornoCalcola
        Dim ris As ritornoCalcola
        Dim I28Tot, I29Tot, II29Tot, II28Tot As Decimal
        Dim I28NrIsc, I29NrIsc, II28NrIsc, II29NrIsc As Integer
        Dim sSqlIRata As String = "SELECT dbo.AlboIscritti.Id AS IdIscritto, dbo.Anagrafica.ID As IdAnagrafica, dbo.Anagrafica.Intest, dbo.Anagrafica.Nome, dbo.Anagrafica.Cognome, dbo.Anagrafica.Data_Nascita, 2005 - YEAR(dbo.Anagrafica.Data_Nascita) AS Eta, dbo.AlboIscritti.DataIscrizione, "
        sSqlIRata += "CASE WHEN (" & Anno & " - YEAR(dbo.Anagrafica.Data_Nascita)) < 29 then " & (Importo28oMenoPrimaRata).ToString().Replace(",", ".") & " ELSE " & (Importo29oPiuPrimaRata).ToString().Replace(",", ".") & " END As Importo, " & Sicop.Classi.DALBase.cConnessione.SQLData(DataScadIRata) & " As DataScadenza "
        sSqlIRata += "FROM dbo.Anagrafica LEFT OUTER JOIN dbo.AlboIscritti ON dbo.Anagrafica.ID = dbo.AlboIscritti.Id_ana WHERE (dbo.AlboIscritti.Storico = 0) AND (YEAR(dbo.AlboIscritti.DataIscrizione) < " & Anno & ") ORDER BY " & (Anno - 1) & " - Year(dbo.Anagrafica.Data_Nascita);"
        Dim sSqlIIRata As String = "SELECT dbo.AlboIscritti.Id AS IdIscritto, dbo.Anagrafica.ID As IdAnagrafica, dbo.Anagrafica.Intest, dbo.Anagrafica.Nome, dbo.Anagrafica.Cognome, dbo.Anagrafica.Data_Nascita, 2005 - YEAR(dbo.Anagrafica.Data_Nascita) AS Eta, dbo.AlboIscritti.DataIscrizione, "
        sSqlIIRata += "CASE WHEN (" & Anno & " - YEAR(dbo.Anagrafica.Data_Nascita)) < 29 then " & (Importo28oMeno - Importo28oMenoPrimaRata).ToString().Replace(",", ".") & " ELSE " & (Importo29oPiu - Importo29oPiuPrimaRata).ToString().Replace(",", ".") & " END As Importo, " & Sicop.Classi.DALBase.cConnessione.SQLData(DataScadIIRata) & " As DataScadenza "
        sSqlIIRata += "FROM dbo.Anagrafica LEFT OUTER JOIN dbo.AlboIscritti ON dbo.Anagrafica.ID = dbo.AlboIscritti.Id_ana WHERE (dbo.AlboIscritti.Storico = 0) AND (YEAR(dbo.AlboIscritti.DataIscrizione) < " & Anno & ") ORDER BY " & (Anno - 1) & " - Year(dbo.Anagrafica.Data_Nascita);"
        Dim cn As New Sicop.Classi.DALBase.cConnessione
        Dim tbIRata As System.Data.DataTable = cn.getDataTable(sSqlIRata)
        'Calcolo brutalmente i totali
        For Each riga As Data.DataRow In tbIRata.Rows
            If (Integer.Parse(riga("Eta")) < 29) Then
                ris.s28IRataNrIscritti += 1
                ris.s28IRataTotale += Decimal.Parse(riga("Importo"))
            Else
                ris.s29IRataNrIscritti += 1
                ris.s29IRataTotale += Decimal.Parse(riga("Importo"))
            End If
        Next
        Dim tbIIRata As System.Data.DataTable = cn.getDataTable(sSqlIIRata)
        For Each riga As Data.DataRow In tbIIRata.Rows
            If (Integer.Parse(riga("Eta")) < 29) Then
                ris.s28IIRataNrIscritti += 1
                ris.s28IIRataTotale += Decimal.Parse(riga("Importo"))
            Else
                ris.s29IIRataNrIscritti += 1
                ris.s29IIRataTotale += Decimal.Parse(riga("Importo"))
            End If
        Next
        Return ris
    End Function
    Public Shared Function get010Rendiconto(ByVal __idEmissione As Integer, ByVal __incassato As String) As DataTable

        'Dim sql As String

        'If (__incassato = "S") Then
        '    sql = "SELECT LTRIM(RTRIM(dbo.Anagrafica.Nome)) + ' ' + LTRIM(RTRIM(dbo.Anagrafica.Cognome)) AS Nominativo, CONVERT(char(10), dbo.Anagrafica.Data_Nascita, 103) + ' ' + dbo.Anagrafica.Desc_comune_nascita +  ' (' + dbo.Anagrafica.Prov_Nascita + ')' AS Nascita, "
        '    sql += "dbo.AlboIscritti.DataIscrizione, dbo.AlboIscritti.NumeroIscrizione, dbo.AlboIncassi.Data, dbo.AlboIncassi.Oggetto, dbo.AlboIncassi.Importo, dbo.AlboIncassi.DataScadenza, dbo.AlboIncassi.DataPagamento, dbo.AlboIncassi.FlussoId, dbo.AlboIncassiMetodoPagamento.Descrizione "
        '    sql += "dbo.AlboIncassi LEFT OUTER JOIN dbo.AlboIncassiMetodoPagamento ON dbo.AlboIncassi.IdAlboIncassiMetodoPagamento = dbo.AlboIncassiMetodoPagamento.Id LEFT OUTER JOIN dbo.Anagrafica ON dbo.AlboIncassi.IdAnagrafica = dbo.Anagrafica.ID LEFT OUTER JOIN dbo.AlboIscritti ON dbo.Anagrafica.ID = dbo.AlboIscritti.Id_ana "
        '    sql += "WHERE dbo.AlboIncassi.IdEmissione = " & __idEmissione & " AND dbo.AlboIncassi.DataPagamento is not null ORDER BY LTRIM(RTRIM(dbo.Anagrafica.Nome)) + ' ' + LTRIM(RTRIM(dbo.Anagrafica.Cognome));"

        'Else
        '    sql = "SELECT LTRIM(RTRIM(dbo.Anagrafica.Nome)) + ' ' + LTRIM(RTRIM(dbo.Anagrafica.Cognome)) AS Nominativo, CONVERT(char(10), dbo.Anagrafica.Data_Nascita, 103) + ' ' + dbo.Anagrafica.Desc_comune_nascita +  ' (' + dbo.Anagrafica.Prov_Nascita + ')' AS Nascita, "
        '    sql += "dbo.AlboIscritti.DataIscrizione, dbo.AlboIscritti.NumeroIscrizione, dbo.AlboIncassi.Data, dbo.AlboIncassi.Oggetto, dbo.AlboIncassi.Importo, dbo.AlboIncassi.DataScadenza, dbo.AlboIncassi.FlussoId "
        '    sql += "FROM dbo.AlboIncassi LEFT OUTER JOIN dbo.Anagrafica ON dbo.AlboIncassi.IdAnagrafica = dbo.Anagrafica.ID LEFT OUTER JOIN dbo.AlboIscritti ON dbo.Anagrafica.ID = dbo.AlboIscritti.Id_ana WHERE dbo.AlboIncassi.IdEmissione = " & __idEmissione & " AND dbo.AlboIncassi.DataPagamento is null ORDER BY LTRIM(RTRIM(dbo.Anagrafica.Nome)) + ' ' + LTRIM(RTRIM(dbo.Anagrafica.Cognome));"

        'End If

        'Dim rep As New cCreaReport

        'rep.bindReportQt(sql)

    End Function
End Class
